#pragma GCC optimize(2)
#include <iostream>
#include <queue>
#include <map>
#include <unordered_map>
#include <vector>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstring>
#include <set>
#include <unordered_set>
#define IOS ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
const int N=1e6+10;
ll a[N];
int b[N];
ll f[N][3];
int main()
{
	IOS;
    int n;
    cin>>n;
    
    for(int i=1;i<=n;i++) cin>>a[i];
    for(int i=1;i<=n;i++) cin>>b[i];
    for(int i=1;i<=n;i++)
    {
        if(b[i]==0)
        {
            if(b[i-1]==1)
            {
                f[i][0]=max(f[i-1][0],f[i-1][1]);
                f[i][1]=f[i-1][2];
            }
            else
            {
                f[i][0]=max(f[i-1][0],f[i-1][1]);
            }
        }
        if(b[i]==1)
        {
            if(b[i-1]==0)
            {
                f[i][0]=f[i-1][0]+a[i-1];
                f[i][1]=max(f[i-1][0],f[i-1][1])+a[i];
                f[i][2]=max(f[i-1][0],f[i-1][1])+a[i+1];
            }
            else
            {
                f[i][1]=max(f[i-1][0],f[i-1][1])+a[i];
                f[i][0]=f[i-1][0]+a[i-1];
                f[i][2]=max({f[i-1][0],f[i-1][1],f[i-1][2]})+a[i+1];
            }
        }
    }
    ll ans=0;

    ans=max(ans,max({f[n][0],f[n][1],f[n][2]}));
    cout<<ans;

	return 0;
}
